SYSCALL fixes.
Signed-off-by: keir.fraser@cl.cam.ac.uk
.quad 0x00af9a000000ffff /* 0x0810 ring 0 code, 64-bit mode */
.quad 0x00cf92000000ffff /* 0x0818 ring 0 data */
.quad 0x00cffa000000ffff /* 0x0823 ring 3 code, compatibility */
- .quad 0x00affa000000ffff /* 0x082b ring 3 code, 64-bit mode */
- .quad 0x00cff2000000ffff /* 0x0833 ring 3 data */
+ .quad 0x00cff2000000ffff /* 0x082b ring 3 data */
+ .quad 0x00affa000000ffff /* 0x0833 ring 3 code, 64-bit mode */
.quad 0x0000000000000000 /* unused */
.fill 4*NR_CPUS,8,0 /* space for TSS and LDT per CPU */
#include <public/xen.h>
ENTRY(hypercall)
+ sti
movl $__GUEST_SS,8(%rsp)
pushq %r11
pushq $__GUEST_CS
pushq %rcx
pushq $0
SAVE_ALL
- andq $(NR_hypercalls-1),%rax
- leaq SYMBOL_NAME(exception_table)(%rip),%rcx
+ andq $(NR_hypercalls-1),%rax
+ leaq SYMBOL_NAME(hypercall_table)(%rip),%rcx
callq *(%rcx,%rax,8)
RESTORE_ALL
addq $8,%rsp
movl XREGS_entry_vector(%rsp),%eax
leaq SYMBOL_NAME(exception_table)(%rip),%rdx
callq *(%rdx,%rax,8)
- jmp restore_all_xen
+ jmp restore_all_xen
ENTRY(divide_error)
pushq $0
* Common SYSCALL parameters.
*/
- wrmsr(MSR_STAR, 0, (FLAT_RING3_CS64<<16) | __HYPERVISOR_CS);
+ wrmsr(MSR_STAR, 0, (FLAT_RING3_CS32<<16) | __HYPERVISOR_CS);
wrmsr(MSR_SYSCALL_MASK, ~EF_IE, 0U); /* disable interrupts */
}
#define __HYPERVISOR_DS32 0x0818
#define __HYPERVISOR_DS __HYPERVISOR_DS64
-#define __GUEST_CS 0x082b
+#define __GUEST_CS 0x0833
#define __GUEST_DS 0x0000
-#define __GUEST_SS 0x0833
+#define __GUEST_SS 0x082b
/* For generic assembly code: use macros to define operation/operand sizes. */
#define __OS "q" /* Operation Suffix */
*/
#define FLAT_RING3_CS32 0x0823 /* GDT index 260 */
-#define FLAT_RING3_CS64 0x082b /* GDT index 261 */
-#define FLAT_RING3_DS32 0x0833 /* GDT index 262 */
+#define FLAT_RING3_CS64 0x0833 /* GDT index 261 */
+#define FLAT_RING3_DS32 0x082b /* GDT index 262 */
#define FLAT_RING3_DS64 0x0000 /* NULL selector */
-#define FLAT_RING3_SS32 0x0833 /* GDT index 262 */
-#define FLAT_RING3_SS64 0x0833 /* GDT index 262 */
+#define FLAT_RING3_SS32 0x082b /* GDT index 262 */
+#define FLAT_RING3_SS64 0x082b /* GDT index 262 */
#define FLAT_GUESTOS_DS64 FLAT_RING3_DS64
#define FLAT_GUESTOS_DS32 FLAT_RING3_DS32